from typing import Dict, List, Any, Optional

# Bug相关工具定义
class BugTools:
    def __init__(self, http_client):
        self.http = http_client
    
    def get_bugs(self, params: Optional[Dict[str, Any]] = None):
        """获取Bug列表"""
        print('获取Bug列表')
        response = self.http.get('/api.php/v1/bugs', params=params)
        print(response)
        return response
        
    def create_bug(self, data: Dict[str, Any]):
        """添加单个Bug"""
        print('创建新Bug')
        response = self.http.post('/api.php/v1/bugs', json=data)
        print(response)
        return response
        
    def get_bug_detail(self, bug_id: int):
        """获取Bug详情"""
        print(f'获取Bug ID={bug_id}的详情')
        response = self.http.get(f'/api.php/v1/bugs/{bug_id}')
        print(response)
        return response
        
    def update_bug(self, bug_id: int, data: Dict[str, Any]):
        """编辑Bug"""
        print(f'编辑Bug ID={bug_id}的信息')
        response = self.http.put(f'/api.php/v1/bugs/{bug_id}', json=data)
        print(response)
        return response
        
    def delete_bug(self, bug_id: int):
        """删除Bug"""
        print(f'删除Bug ID={bug_id}')
        response = self.http.delete(f'/api.php/v1/bugs/{bug_id}')
        print(response)
        return response
        
    def resolve_bug(self, bug_id: int, data: Dict[str, Any]):
        """解决Bug"""
        print(f'解决Bug ID={bug_id}')
        response = self.http.post(f'/api.php/v1/bugs/{bug_id}/resolve', json=data)
        print(response)
        return response
    
    # 用于注册工具到MCP
    def register(self, mcp_instance):
        """
        将所有Bug工具注册到MCP实例
        
        Args:
            mcp_instance: FastMCP实例
        """
        mcp_instance.add_tool(
            self.get_bugs, 
            name="get_bugs", 
            description="获取Bug列表。参数：可选params(Dict)包含筛选条件如product(产品ID，可从get_products获取)、project(项目ID，可从get_projects获取)、status(状态，如active/resolved/closed)、severity(严重程度，1-4)、assignedTo(指派给谁，用户ID)、limit(每页数量)、page(页码)等。不传参数时获取所有Bug。"
        )
        
        mcp_instance.add_tool(
            self.create_bug, 
            name="create_bug", 
            description="创建新Bug。参数：data(Dict，必填)包含Bug信息，必填字段有product(产品ID，从get_products获取)、title(Bug标题)、steps(重现步骤)，可选字段有project(项目ID)、openedBuild(影响版本)、assignedTo(指派给谁)、type(类型)、severity(严重程度1-4)、pri(优先级)、keywords(关键词)等。"
        )
        
        mcp_instance.add_tool(
            self.get_bug_detail, 
            name="get_bug_detail", 
            description="获取Bug详情。参数：bug_id(int，必填)Bug ID。Bug ID可从get_bugs方法返回的列表中获取。"
        )
        
        mcp_instance.add_tool(
            self.update_bug, 
            name="update_bug", 
            description="编辑Bug信息。参数：bug_id(int，必填)Bug ID；data(Dict，必填)包含要更新的字段，如title(Bug标题)、steps(重现步骤)、severity(严重程度)、pri(优先级)等。Bug ID可从get_bugs获取，现有Bug信息可从get_bug_detail获取。"
        )
        
        mcp_instance.add_tool(
            self.delete_bug, 
            name="delete_bug", 
            description="删除Bug。参数：bug_id(int，必填)要删除的Bug ID。Bug ID可从get_bugs方法返回的列表中获取。需要管理员权限或Bug创建者。"
        )
        
        mcp_instance.add_tool(
            self.resolve_bug, 
            name="resolve_bug", 
            description="解决Bug。参数：bug_id(int，必填)Bug ID；data(Dict，必填)包含解决方案信息，必填字段有resolution(解决方案，如fixed/norepro/duplicate等)，可选字段有resolvedBuild(解决版本)、comment(备注)等。Bug ID可从get_bugs获取。通常只有Bug的指派人才能解决Bug。"
        ) 